package com.party.core.service.mall;

import com.party.common.paging.Page;
import com.party.core.model.mall.*;
import com.party.core.service.IBaseService;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 商城商品服务接口
 * Created by wei.li
 *
 * @date 2017/8/15 0015
 * @time 16:32
 */
public interface IMallGoodsService extends IBaseService<MallGoods> {

    /**
     * 商品列表
     *
     * @param goods
     * @param params
     * @param page
     * @return
     */
    List<MallGoodsWithAuthor> withAuthorListPage(MallGoods goods, Map<String, Object> params, Page page);


    /**
     * 商品列表（带类型）
     *
     * @param mallGoods 商品
     * @param page      分页参数
     * @return 列表
     */
    List<MallCategoryWithGoods> withCategoryListPage(MallGoods mallGoods, Page page);

    /**
     * 根据类型查看商品
     *
     * @param categoryId 类型编号
     * @return 商品编号
     */
    List<MallGoods> findByCategoryId(String categoryId);

    /**
     * @param input
     * @param page
     * @return
     */
    List<MallGoods> search(MallCategorySiftGoodsInput input, Page page);

    /**
     * 获取商品信息(详情)
     *
     * @param id: 商品id
     * @return
     */
    MallGoodsInfo info(String id);

    /**
     * 清除开售时间
     *
     * @param id 商品id
     */
    void clearStartTime(String id);

    /**
     * 更新状态为已售罄
     *
     * @param id     商品id
     * @param status 状态
     */
    void updateStatus(String id, Integer status);

    /**
     * 检查品牌和分类有没有对应的商品
     *
     * @param brandId    品牌id
     * @param categoryId 分类id
     * @return
     */
    Integer checkCategoryBrand(String brandId, String categoryId);

    /**
     * 检查规格和分配有没有对应的商品
     *
     * @param specId     规格id
     * @param categoryId 分类id
     * @return
     */
    Integer checkCategorySpec(String specId, String categoryId);

    /**
     * 更新库存
     *
     * @param id     商品id
     * @param stock 库存
     */
    void updateStock(String id, Long stock);

    /**
     * 获取商品列表
     *
     * @param goodsIds 商品IDS
     * @param page     分页参数
     * @return
     */
    List<MallGoods> getGoodsList(Set<String> goodsIds, Page page);
}
